package maps

import "fmt"

/*
	map[KeyType]ValueType

map是引用类型，默认值为nil
必须要初始化后才能使用

1、使用make初始化
make(map[KeyType]ValueType, [cap])
cap表示容量，最好是设置一个合适的容量
2、直接给初始化值

*/
func InitMap() {
	// 使用make初始化
	map1 := make(map[string]int, 8)
	map1["zhangsan"] = 23
	map1["lisi"] = 24
	fmt.Printf("map1: %v\n", map1)

	// 直接给值
	map2 := map[string]int{
		"wangwu":  23,
		"zhaoliu": 24,
	}
	fmt.Printf("map2: %v\n", map2)
}

/*
判断map中是否存在某个key
*/
func JudgeContainsKey() {
	map1 := map[string]int{
		"zhangsan": 23,
		"lisi":     24,
	}
	key := "zhangsan"
	// 返回一个值和是否存在标识位
	v, contains := map1[key]
	if contains {
		fmt.Printf("key:%v, value:%v \n", "zhangsan", v)
	}
}

/*
遍历map
遍历map的顺序和添加键值对的顺序无关
*/
func RangeMap() {
	map1 := map[string]int{
		"zhangsan": 23,
		"lisi":     24,
	}
	for k, v := range map1 {
		fmt.Printf("k:%v, v:%v \n", k, v)
	}
}

func DelKV() {
	map1 := map[string]int{
		"zhangsan": 23,
		"lisi":     24,
	}
	// 删除
	delete(map1, "zhangsan")
	fmt.Println(map1)
}
